Начало


In [ ]:
print ('Python')

In [ ]:
print ('Python', 'Version')

In [ ]:
print ('Python\n', '\tVersion')

In [ ]:
3/4+1-5

In [ ]:
5 / 3

In [ ]:
5 // 3

1. Типы данных


In [ ]:
a = 973  #
b = 210624583337114373395836055367340864637790190801098222508621955072
c = -1.2
str1 = "Infinitely Demanding"
str2 = 'Simon Critchley'
str3 = str2
str4 = ''
unknown1 = None
unknown2 = None

In [ ]:
print (a,b,c,str1,str2,str3,str4, unknown1, unknown2)

In [ ]:
print (type(a), type(b), type(c), type(str1), type(str2), type(str3), type(str4))
print (unknown1)

In [ ]:
type(a)

In [ ]:
#Метод исменяет тип данных:
type(str(a))

2. Переменные


In [ ]:
x = "blue"
y = "green"
z = x

In [ ]:
print(x, y, z)
z = y

In [ ]:
print(x, y, z)

In [ ]:
x = z
print(x, y, z)

In [ ]:
#Ранее изменяли тип данных, какой тип данных теперь
type(a)
shift + tap на функции для получения справки по ней ctrl + enter выполнение ячейки alt + enter выполнение ячейки, создание следующей и переход к ней tab получить подсказки

In [ ]:
a = 'переменная'
b = 'переменная'
print (a is b) # сравнение объектов
print (a == b) # сравнение значений

In [ ]:
a = b
print (a is b) # сравнение объектов
print (a == b) # сравнение значений
a

In [ ]:
A = None
B = None 
A == B
A is B

In [ ]:
# операторы сравнения
a = 2
b = 6
print (a == b)
print (a < b)
print (a <= b, a != b, a >= b, a > b)

In [ ]:
0 <= a <= 10

In [ ]:
'4' == 4

In [ ]:
'4' > 4

In [ ]:
phrase = "War and Peace"
print ("battle" in phrase)
print ("peace" in phrase)
print ("Peace" in phrase)

Логические операторы

  1. and
  2. or
  3. not

In [ ]:
True and False

In [ ]:
True or False

In [ ]:
False or True

In [ ]:
False and False

In [ ]:
False or False

In [ ]:
phrase = "War and Peace"
print ("battle" not in phrase)
print ("peace"  not in phrase)
print ("Peace"  not in phrase)

In [ ]:
a = 2
0 <= a <= 10
Задача. Переписать прошлое выражение с использованием оператора and

Инструкция if


In [ ]:
if boolean_expression1:
    suite1

elif boolean_expression2:
    suite2

...
elif boolean_expressionN:
    suiteN

else:    
    else_suite

In [ ]:
9 % 2 #деление с остатком

In [ ]:
if a >= 1:
    print ('Натуральное число')
elif a < 1:
    print ('Целое число')
else: 
    print ('Рациональное число')

In [ ]:
Задача. Изменить код в предыдущей ячейке, так чтобы условия правильно определяли тип числа

In [ ]:
#Условия могут быть вложенными
x = 0; y = 1;
if x > 0:
    if y > 0:               # x > 0, y > 0
        print("Первая четверть")
    else:                   # x > 0, y < 0
        print("Четвертая четверть")
else:
    if y > 0:               # x < 0, y > 0
        print("Вторая четверть")
    else:                   # x < 0, y < 0
        print("Третья четверть")
Задача. Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.
Задача. Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.
Задача на повторение. 1. Взгляните на следующие три инструкции. Изменится ли значение перемен- ной A? A = “spam” B = A B = “shrubbery” 2. Взгляните на следующие три инструкции. Изменится ли значение перемен- ной A? A = [“spam”] B = A B[0] = “shrubbery”

3. Циклы

Инструкция while


In [ ]:
while boolean_expression:
    suite

In [ ]:
i = 0
while i < 5:
    print (i % 2)
    i += + 1 # i = i + 1

Инструкция for … in


In [ ]:
for variable in iterable:
    suite

In [ ]:
for letter in "time":
    print (letter)

In [ ]:
for x in range(0,3,1): # range(начало, конец, шаг)
    print (x)

In [ ]:
# получение значений, вводимых пользователем
k = input()
Задача. Даны два целых числа A и B (при этом A ≤ B). Выведите все числа от A до B включительно.
Задача. Даны два целых числа A и В, A < B. Выведите все нечётные числа от A до B включительно, в порядке убывания.
Задача. По данному натуральному n вычислите сумму 1^3+2^3+3^3+...+n^3.

In [ ]:
2**3

4. Функции


In [ ]:
def functionName(arguments):
    suite

In [ ]:
def add(x, y):
    a = x + y
    return a

In [ ]:
def add(x, y):
    return x + y

In [ ]:
print (add(1,2))

In [ ]:
sum = add(1,2)
print (sum)

In [ ]:
def newfunc(n):
    def myfunc(x):
         return x + n
    return myfunc

In [ ]:
def func(a, b, c=2): # c - необязательный аргумент. Если не указать при вызове, то значение 2 будет по умолчанию
    return a + b + c
func(1, 2)

In [ ]:
func()

In [ ]:
def person(name, age):
    print (name, "is", age, "years old")

# Хотя в описании функции первым аргументом идет имя, мы можем вызвать функцию вот так 
person(age=23, name="John")
Задача. По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
Задача. Найти НОД двух чисел (наибольший общий делитель)

In [13]:
def NOD(a,b):	
	while a!=0 and b!=0:
		if a > b:
			a = a % b
		else:
			b = b % a
	 
	return a+b
NOD(18,30)


Out[13]:
6

In [14]:
NOD(18,30)


Out[14]:
6

In [18]:
def factorial(n):
    fac = 1 
    i = 0 
    while i < n:
        i += 1
        fac = fac * i
    return fac

print (factorial(5))


120

In [24]:
%%time
factorial(211)


Wall time: 0 ns
Out[24]:
22328783881661914958481873975346502495151470121092663127656427617172486869336444341196216861471796204456103981797935323465763492125980526669772652700063306391000092324747490987759008282321662774044560021923711172537165034028116470777032463317525690139861312277154265627409161865934581816407380706408159413469087649804140238680046340298380454769197056000000000000000000000000000000000000000000000000000
Задача. Найти факториал числа. Факториа́л натурального числа n (лат. factorialis — действующий, производящий, умножающий; обозначается n!, произносится эн факториа́л) — произведение всех натуральных чисел от 1 до n включительно.
Задача. Числа Фибоначчи в которой первые два числа равны либо 1 и 1, либо 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел. Названы в честь средневекового математика Леонардо Пизанского. По данному числу n определите n-е число Фибоначчи напримем для 6го числа ответ 8, для 10го - 55, для 19го - 4181

Локальные и глобальные переменные


In [ ]:
def f():
    print(a)

a = 1 # тут а глобольная
f()

In [ ]:
def f(text):
    text  = 'Variable'  # переменная локальная
    print(text)

f('aaa')
print (text)

In [ ]:
# Задача. Что будет выведено в результате?
def f():
    num = 1

num = 0
f()
print(num)

# Вне зависимости от результата это плохой подход, нужно давать разные наименования переменным

In [ ]:
def f():
    global num # можно явно указывать, что она глобальная
    num = 1
    print(num)

num = 0
f()
print(num)

In [ ]:
#для вызова справки по функции
help (print)
Рекомендация по созданию функции в Python

In [ ]:
1. Начинать следует с примеров того, что делает функция, и подобрать подходящее название
2. Указать типы данных, которые принимает функция и тип данных, который она возвращае
3. Подобрать подходящие названия для переменных
4. Написать краткое, но содержательное описание функции
5. Написать собственно тело функции

In [ ]:
def rectangle_area_finder(side1, side2):
    """
    (num, num) -> num
 
    Returns an area of a rectangle with given sides.    
 
    >>> rectangle_area_finder(3, 5)
    15
    >>> rectangle_area_finder(17.2, 6)
    103.2
    """
    return a * b

In [ ]:
help(rectangle_area_finder)

Рекурсии


In [ ]:
def short_story():
    print("У попа была собака, он ее любил.")
    print("Она съела кусок мяса, он ей купил еще мяса,")
    print("И надпись написал:")
    short_story()

short_story()

In [41]:
M = {0: 0, 1: 1}
def fib(n):
    
    if n in M:
        return M[n]
    M[n] = fib(n - 1) + fib(n - 2)
    return M[n]

In [44]:
print (M)


{0: 0, 1: 1, 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55}

In [45]:
def fib(n):
    fib1=fib2=1
    i = 2 
    while i < n:
        fib_sum = fib2 + fib1
        fib1 = fib2
        fib2 = fib_sum
        i += 1
    return fib_sum

In [42]:
fib(10)


Out[42]:
55

In [25]:
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))


120
Задача. Напишите функцию fib(n), которая по данному целому неотрицательному n возвращает n-e число Фибоначчи. В этой задаче нельзя использовать циклы — используйте рекурсию.

In [28]:
%time
factorial(452)


Wall time: 0 ns
Out[28]:
3533506829824763928727384642597107197831211820353954676258140892378737430591719484842642260981825120362035921971649789196675115546082203998272013021160900137514685970918482818713992418765221526987327078501115242807775483042412779688924340813969157000183682820272417582028489728147095129657183124291540458544042008042308380209909521405261876650259890680856773620209537637283796820053989247467149927627961552294580550952469260983442106755636337923358986227938968407629525884163551160250413810663393375726553978267372218225149951277125676798635196020745367822389395617923504943624125663319680434143005773774604463235049693710573430697836267162808939901956973469135147732902625853854071028668714544129217566600618356409313276875853809090798339243992641683705023568437935027990326287472932723871360087563484400872035948548998162682529960398228018792200024088672237899492243427383271259922886532530176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

In [ ]: